package client;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import DTO.VendeurDTO;

/**
 * Classe décrivant la fenêtre de modification des informations personnelles.
 * 
 * @author Julien Dubois
 * @version 1.0 (Mai 2012)
 */
@SuppressWarnings("serial")
public class ClientFenetreModificationInfoPerso extends JFrame implements ActionListener, WindowListener
{
	//DECLARATION DES VARIABLES DE LA CLASSE 
	
	/**
	 * Panel général de fond.
	 */
	private JPanel grandPanel = new JPanel();
	
	/**
	 * Panel principal contenant nos éléments.
	 */
	private JPanel panel;
	
	/**
	 * Label's de la fenêtre.
	 */
	private JLabel jlabel0, labelNom, labelPrenom, labelLogin, labelPassword, labelTelephone, labelMail, erreurChampVide, erreurLoginDejaExistant;
	
	/**
	 * TextFields de la fenêtre.
	 */
	private JTextField taNom, taPrenom, taLogin, taTelephone, taMail ;
	private JPasswordField taPassword ;

	/**
	 * Bouton's de la fenêtre.
	 */
	private JButton btnModifier, btnAnnuler ; 
	
	/**
	 * Instances de VendeurDTO de la fenêtre.
	 */
	private VendeurDTO vendeur, vendeurModif ;
	
	/**
	 * String de la fenêtre.
	 */
	private int idVendeur ;
	
	/**
	 * Booleen de notre fenêtre.
	 */
	//le booleen quitter sert à assurer proprement la fermeture de la connexion avec le serveur. 
	private boolean quitter = true;
	
	
	//CONSTRUCTEUR DE LA FENETRE 
	
		/**
		 * Constructeur par defaut.
		 */
		public ClientFenetreModificationInfoPerso()
		{
			/*
			 * Va nous pemettre d'utiliser this.dispose pour disposer d'un fenêtre quand on en a plus besoin (pour la fermer)
			 */
			this.addWindowListener(new WindowAdapter()
			{
				public void windowClosing(WindowEvent arg0)
				{
					if(quitter)
					{
						ClientCommunication.getInstance().fermerConnexion();
						System.err.println("mdr de lol");
					}
				}
			});

			
			//on récupère l'instance courante du vendeur.
			vendeur = ClientCommunication.getInstance().getVendeurStocke();
			idVendeur = ClientCommunication.getInstance().getVendeurStocke().getId();
			
			
			this.setTitle("Petites Annonces - Modifier");
			this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			this.setVisible(true);

			//on définit la taille de la fenêtre
			//600x660 pour respecter au mieux la taille de l'image d'accueil.
			this.setSize(600,660);

			
			//On n'empêche le redimensionnement.
			this.setResizable(false);
			
			
			//On colore le panel dans un gris sympathique et soyeux.
			grandPanel.setBackground(Color.LIGHT_GRAY);
			this.setContentPane(grandPanel);
			
			
			//PERSONNALISATION DE LA FENETRE A PARTIR DICI
			
			//GridLayout pour agencer nos éléments.
			GridLayout gridLayout = new GridLayout(12, 2, 3, 20);
			
			
			//Association Layout <-> Panel + CENTER + couleur.
			panel = new JPanel();
			panel.setLayout(gridLayout);
			this.getContentPane().add(panel, BorderLayout.CENTER);
			panel.setBackground(Color.LIGHT_GRAY);
			
			
			
			// ON DISPOSE DES ELEMENTS DE NOTRE FENETRE DANS petitPanel
			
			//Label informatif.
			jlabel0 = new JLabel();
			jlabel0.setText("Modifier vos informations");
			panel.add(jlabel0);
			
			
			//Espace pour agencer nos éléments.
			JLabel espacevide2 = new JLabel();
			espacevide2.setPreferredSize(new Dimension(20, 30));
			panel.add(espacevide2);
			
			
			//On récupère les informations du vendeur courant.
			String prenom_vendeur = vendeur.getPrenom() ;
			String nom_vendeur = vendeur.getNom() ;
			String login_vendeur = vendeur.getLogin() ;
			String password_vendeur = vendeur.getMot_de_passe() ;
			String telephone_vendeur = vendeur.getTelephone() ;
			String mail_vendeur = vendeur.getEmail() ;
			
			
			//A partir de là on dispose tous les éléments necessaires du formulaire.
			labelNom = new JLabel(" Nom : ");
			panel.add(labelNom);
			
			taNom = new JTextField(nom_vendeur);
			panel.add(taNom);
			
			
			labelPrenom = new JLabel(" Prenom : ");
			panel.add(labelPrenom);
				
			taPrenom = new JTextField(prenom_vendeur);
			panel.add(taPrenom);
			

			labelLogin = new JLabel(" Login : ");
			panel.add(labelLogin);
			
			taLogin = new JTextField(login_vendeur);
			panel.add(taLogin);
			
			labelPassword = new JLabel(" Password : ");
			panel.add(labelPassword);
			
			taPassword = new JPasswordField(password_vendeur);
			panel.add(taPassword);
			
			labelTelephone = new JLabel(" Telephone : ");
			panel.add(labelTelephone);
			
			taTelephone = new JTextField(telephone_vendeur);
			panel.add(taTelephone);
			
			labelMail = new JLabel(" Mail : ");
			panel.add(labelMail);
			
			taMail = new JTextField(mail_vendeur);
			panel.add(taMail);
			
			JLabel espacevide3 = new JLabel();
			espacevide3.setPreferredSize(new Dimension(80, 30));
			panel.add(espacevide3);
			
			JLabel espacevide4 = new JLabel();
			espacevide4.setPreferredSize(new Dimension(80, 30));
			panel.add(espacevide4);
			
			//Message d'erreur.
			erreurChampVide = new JLabel("Veuillez remplir tous les champs, svp !");
			erreurChampVide.setForeground(Color.lightGray);
			panel.add(erreurChampVide);
			
			JLabel espacevide5 = new JLabel();
			espacevide5.setPreferredSize(new Dimension(80, 30));
			panel.add(espacevide5);
			
			//Message d'erreur.
			erreurLoginDejaExistant = new JLabel("Le login est dejà utilisé, veuillez en changer. Merci ! ");
			erreurLoginDejaExistant.setForeground(Color.lightGray);
			panel.add(erreurLoginDejaExistant);
			
			JLabel espacevide6 = new JLabel();
			espacevide6.setPreferredSize(new Dimension(80, 30));
			panel.add(espacevide6);
			
			//Deux boutons placés en bas de page.
			btnModifier = new JButton("Modifier");
			panel.add(btnModifier);
			btnModifier .addActionListener(this);
			
			btnAnnuler = new JButton("Annuler");
			panel.add(btnAnnuler);
			btnAnnuler.addActionListener(this);	
	}
			
	
	// ACTIONS SUR LES BOUTONS

	public void actionPerformed(ActionEvent arg0)
	{
		Object event = arg0.getSource();
		
		//Clic sur le bouton "Modifier..."
		if (event == btnModifier)
		{
			if(ClientCommunication.verifierTelephone(taTelephone.getText()))
			{
				if(ClientCommunication.verifierEmail(taMail.getText()))
				{
					//on commence par récupérer les informations concernant la nouvelle instance du vendeur à modifier
					vendeurModif = new VendeurDTO(idVendeur, taNom.getText(), taPrenom.getText(), taLogin.getText(), new String(taPassword.getPassword()), taTelephone.getText(), taMail.getText());
					
					//on gère le cas si un champs est vide
					if ( taNom.getText().equals("") || taPrenom.getText().equals("") || taLogin.getText().equals("") || 
							new String(taPassword.getPassword()).equals("") || taTelephone.getText().equals("") || 
							taMail.getText().equals(""))
					{
						erreurChampVide.setText("Veuillez remplir tous les champs, svp !");
						erreurChampVide.setForeground(Color.red);
						erreurLoginDejaExistant.setForeground(Color.lightGray);
						//ici on passe message d'erreur CHAMPS VIDE en ROUGE
					}
					else
					{
						//si le login est deja utilisé (correspondant au code d'erreur -2)
						if (ClientCommunication.getInstance().modifierVendeur(idVendeur, vendeurModif) == -2)		
						{
							erreurLoginDejaExistant.setForeground(Color.red);
							erreurChampVide.setForeground(Color.lightGray);
							//ici on passe un message LOGIN DEJA UTILISE en rouge
						}
						//on enregistre la modification de l'utilisateur ds la BDD
						else
						{
							ClientCommunication.getInstance().modifierVendeur(idVendeur, vendeurModif);
							quitter = false;
							ClientCommunication.getInstance().creerFenetre(grandPanel, "fenetreGestionDeCompte");
							this.dispose();
						}
					}

				}
				else
				{
					erreurChampVide.setText("L'adresse mail n'est pas valide");
					erreurChampVide.setForeground(Color.red);
					erreurLoginDejaExistant.setForeground(Color.lightGray);
				}
			}
			else
			{
				erreurChampVide.setText("Le numéro de téléphone n'est pas valide");
				erreurChampVide.setForeground(Color.red);
				erreurLoginDejaExistant.setForeground(Color.lightGray);
			}

		}
		
		if (event == btnAnnuler)
		{
			quitter = false;
			ClientCommunication.getInstance().creerFenetre(grandPanel, "fenetreGestionDeCompte");
			this.dispose();
		}
		
		
		
	}

	//Méthodes implémentées de WindowListener, on ne les utilisent pas.


	@Override
	public void windowActivated(WindowEvent e)
	{
		
	}




	@Override
	public void windowClosed(WindowEvent e)
	{
		
	}




	@Override
	public void windowClosing(WindowEvent e)
	{
		
	}




	@Override
	public void windowDeactivated(WindowEvent e)
	{
		
	}




	@Override
	public void windowDeiconified(WindowEvent e)
	{
		
	}




	@Override
	public void windowIconified(WindowEvent e)
	{
		
	}




	@Override
	public void windowOpened(WindowEvent e)
	{
		
	}

}
